pass
## 07 Input and Output

### 7.1 Fancier Output Formatting

'''表达式语句
'''
year = 2019
event = 'Fancier Output'
r = F'results of {year} {event}'
r2 = f'results of {year} {event}'
print(r)
print(r2)

'''字符串的 str.format()
'''
yes_votes = 42_572_654
no_votes = 43_132_495
percentage = yes_votes / (yes_votes + no_votes)
print(percentage)

p = '{:-9}YES votes {:2.2%}'.format(yes_votes, no_votes)
print(p)


#### 7.1.1. 格式化字符串文字

''' f-字符串
格式化字符串字面值
'''

'''可选的格式说明符可以跟在表达式后面
'''
import math
print(f'The value of i is approximately {math.pi:.3f}.')        # 保留小数点后三位

'''在 ':' 后传递一个整数可以让该字段成为最小字符宽度
'''
table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7978}
for k, v in table.items():
    print(f'{k:10}==>{v:10d}')      # 实现列对齐效果

'''其他的修饰符可用于在格式化之前转化值。
 '!a' 应用 ascii() ，'!s' 应用 str()，还有 '!r' 应用 repr():
'''
animals = 'eels'
print(f'animals: {animals}.')
print(f'animals: {repr(animals)}.', end='  ==>  ')
print(f'animals: {animals!r}.')

#### 7.1.2. 字符串的 format() 方法

'''位置参数
'''
print('knights: {}, Ni: {}'.format('knights', 'Ni'))
print('spam: {0}, eggs: {1}'.format('spam', 'eggs'))
print('eggs: {1}, spam: {0}'.format('spam', 'eggs'))

'''关键字参数
'''
print('food:  {food} , adjective: {adjective}.'.format(
    food='spam', adjective='absolutely'))

'''位置 和 关键字参数 任意组合
'''

'''如果比较长, 不想拆开, 最好按名称而不是位置, 可以传递一个字典并通过 '[]' 来访问
'''
print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
      'Dcab: {0[Dcab]:d}'.format(table))

'''可以通过使用 '**' 符号将 table 作为关键字参数传递
'''
print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
print()

#### 7.1.3. 手动格式化字符串

for x in range(1, 11):
    print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
    print(repr(x*x*x).rjust(4))

''' str.rjust() 左侧填充
str.ljust() 右侧填充
str.ljust() 右侧填充
str.zfill() 在数字字符串的左边填充零
'''
print(123456789)
print('123456789'.zfill(15))

#### 7.1.4. 旧的字符串格式化方法
'''% 运算符（求余）也可用于字符串格式化。
'''
import math
print("The value: %5.3f."%math.p)

### 7.2. 读写文件
'''open(filename, mode)
mode : r 只读, w 只写, a 追加, r+  打开文件读写, 默认为 r
'''


#### 7.2.2. 使用 json 保存结构化数据
import json
json.dumps([1[2]])
json.dumps([1[2]])